// license-header java merge-point
/**
 * This is only generated once! It will never be overwritten.
 * You can (and have to!) safely modify it by hand.
 */
package fr.upstlse.glre.business.domain;
/**
 * @see fr.upstlse.glre.business.domain.Entreprise
 */
public class EntrepriseDaoImpl
    extends fr.upstlse.glre.business.domain.EntrepriseDaoBase
{
    /**
     * @see fr.upstlse.glre.business.domain.EntrepriseDao#toEntrepriseVO(fr.upstlse.glre.business.domain.Entreprise, fr.upstlse.glre.business.vo.EntrepriseVO)
     */
    public void toEntrepriseVO(
        fr.upstlse.glre.business.domain.Entreprise source,
        fr.upstlse.glre.business.vo.EntrepriseVO target)
    {
        super.toEntrepriseVO(source, target);;
        target.setAdresseVO(getAdresseDao().toAdresseVO(source.getAdresse()));
    }


    /**
     * @see fr.upstlse.glre.business.domain.EntrepriseDao#toEntrepriseVO(fr.upstlse.glre.business.domain.Entreprise)
     */
    public fr.upstlse.glre.business.vo.EntrepriseVO toEntrepriseVO(final fr.upstlse.glre.business.domain.Entreprise entity)
    {
        return super.toEntrepriseVO(entity);
    }


    /**
     * Retrieves the entity object that is associated with the specified value object
     * from the object store. If no such entity object exists in the object store,
     * a new, blank entity is created
     */
    private fr.upstlse.glre.business.domain.Entreprise loadEntrepriseFromEntrepriseVO(fr.upstlse.glre.business.vo.EntrepriseVO entrepriseVO)
    {

        fr.upstlse.glre.business.domain.Entreprise entreprise = this.load(entrepriseVO.getId());
        if (entreprise == null)
        {
            entreprise = fr.upstlse.glre.business.domain.Entreprise.Factory.newInstance();
        }
        return entreprise;
    }

    
    /**
     * @see fr.upstlse.glre.business.domain.EntrepriseDao#entrepriseVOToEntity(fr.upstlse.glre.business.vo.EntrepriseVO)
     */
    public fr.upstlse.glre.business.domain.Entreprise entrepriseVOToEntity(fr.upstlse.glre.business.vo.EntrepriseVO entrepriseVO)
    {
        fr.upstlse.glre.business.domain.Entreprise entity = this.loadEntrepriseFromEntrepriseVO(entrepriseVO);
        this.entrepriseVOToEntity(entrepriseVO, entity, true);
        return entity;
    }


    /**
     * @see fr.upstlse.glre.business.domain.EntrepriseDao#entrepriseVOToEntity(fr.upstlse.glre.business.vo.EntrepriseVO, fr.upstlse.glre.business.domain.Entreprise)
     */
    public void entrepriseVOToEntity(
        fr.upstlse.glre.business.vo.EntrepriseVO source,
        fr.upstlse.glre.business.domain.Entreprise target,
        boolean copyIfNull)
    {
        super.entrepriseVOToEntity(source, target, copyIfNull);
        if(copyIfNull || source.getAdresseVO() != null)
        {
        	target.setAdresse(getAdresseDao().adresseVOToEntity(source.getAdresseVO()));
        }
    }


	@Override
	public Object create(int transform, Entreprise entreprise) {
		if (entreprise == null)
        {
            throw new IllegalArgumentException(
                "Entreprise.create - 'entreprise' can not be null");
        }
		getAdresseDao().create(entreprise.getAdresse());
        this.getHibernateTemplate().save(entreprise);
        return this.transformEntity(transform, entreprise);
	}


	@Override
	public void update(Entreprise entreprise) {
		if (entreprise == null)
        {
            throw new IllegalArgumentException(
                "Entreprise.update - 'entreprise' can not be null");
        }
		getAdresseDao().update(entreprise.getAdresse());
        this.getHibernateTemplate().update(entreprise);
	}
	
    

}